iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
DevOps

建立應用程式 UI 自動化測試 - 以 Robot Framework 為例系列 第 6

[6] Robot Framework 控制結構 (Control structures)

  • 分享至 

  • xImage
  •  

在這個章節,我們將探討 Robot Framework 中的控制結構(Control Structures)及其用法。這些結構是實現複雜邏輯的基礎,能夠根據不同情況動態調整測試案例的執行流。這部分涵蓋了大家熟悉的 for loop 和 if-else 等結構。然而,這也是部分使用者覺得 Robot Framework 不太直觀的地方。讓我們一同深入了解,並一同探討看法吧!

邏輯判斷(if、elif、else)

在測試中,經常需要進行邏輯判斷。比如說在第一次登入時,可能會有一些使用者導引的提示(tips)。這時,我們可以檢查畫面中是否有這個提示,如果有,就將它關閉。儘管 Robot Framework 提供了 IF ELSE 功能,但連官方都建議,當邏輯較為複雜時,應將這個邏輯拆分,不管是透過 python 自定義關鍵字,或是拆出單獨的 keyword 都可以,不要全部寫在測試案例中。下面我們一起來看看 Robot Framework 的邏輯判斷寫法吧:

基本 IF 語法

Robot Framework 的邏輯判斷需要以 IF 為開頭,需要大寫,以及 END 結尾,總結來說就是 IF END 包起來才可以正常的執行,雖然在這裡不強迫 IF 後面需要縮排,但是為了閱讀方面,建議還是需要縮排一下,在下面的範例中,我們有個變數 fruit 是 apple,下方的 if 為,當 fruit 是 apple 時 Log 出 I have an apple,若不是從不印出,最後的結果為打印出 I have an apple。

*** Variables ***
${fruit} =    apple

*** Test Cases ***
Test Case 001
    IF  '${fruit}' == 'apple'
        Log To Console    I have an apple
    END

ELSE IF

如同許多程式語言一樣,Robot Framework 也有提供 ELSE IF 及 ELSE 的用法,下面的範例為,判斷我 fruit 為哪種水果,如果不是 apple 或是 bananas 就印出 The fruit is not a banana or an apple,有的話則顯示該水果:

*** Test Cases ***
Test Case 001
    IF  '${fruit}' == 'apple'
        Log To Console    I have an apple
    ELSE IF    '${fruit}' == 'bananas'
        Log To Console    I like bananas
    ELSE
        Log To Console    The fruit is not a banana or an apple
    END

巢狀 IF (Nested iF Structures)

當然也有提供巢狀 IF 的用法囉,但是如果真的需要判斷到許多層,還是建議拆分出 Test Case,這樣對於後續的維護會比較方便,下面我們來看個例子,當今天水果不是蘋果時,我們就不買,當今天水果是蘋果,但是價格大於 100 元時,我們就說太貴啦,如果小於 100 的話就買:

*** Test Cases ***
Test Case 001
    IF  '${fruit}' == 'apple'
        IF    ${price} < 100
            Log To Console    Buy!
        ELSE
            Log To Console    too expensive!
        END
    ELSE
        Log To Console    No need to buy
    END

迴圈 For Loop

與 Python 相同,在 Robot Framework 中我們一樣要給予一個變數及可以迭代的值,而在 Robot Framework 中的 FOR 語法是有大小寫區分的,結束後需要透過 END 包起來,下面我們可以看看範例,我們透過 for 迴圈分比印出 apple、banana。

*** Test Cases ***
Test Case 001
     FOR    ${fruit}    IN    apple    banana
        Log To Console    ${fruit}
    END

巢狀迴圈 (Nesting FOR loops)

從 Robot Framework 4.0 後,FOR loops 也開始支援 python 巢狀迴圈的寫法,下面一起看看範例:

*** Test Cases ***
Test Case 001
    FOR    ${fruit}    IN    apple    banana
        FOR    ${size}    IN    small    medium    large
            Log To Console    ${fruit}_${size}
        END
    END

印出來的結果如下,我們分別打印出兩種水果加上三種尺寸的組合:

==============================================================================
Test :: Test Control Structures                                               
==============================================================================
Test Case 001                                                         apple_small
apple_medium
apple_large
banana_small
banana_medium
banana_large
Test Case 001                                                         | PASS |
------------------------------------------------------------------------------
Test :: Test Control Structures                                       | PASS |
1 test, 1 passed, 0 failed
==============================================================================

有範圍的迴圈 (FOR-IN-RANGE loop)

當我們需要執行固定得迴圈數量時,可以透過與 python 一樣的 for i in range(10) 來執行,這邊也與 python 同,Log 出來的值會是從 0 開始,然後到 9 就結束:

*** Test Cases ***
Test Case 001
    FOR    ${index}    IN RANGE    10
        Log To Console    ${index}
    END

迭代字典資料 (Dictionary iteration)

這個也與 python 相同的概念,我們也可以對字典 (Dictionary) 的資料做迭代:

*** Variables ***
&{user}          name=max    gender=male

*** Test Cases ***
Test Case 001
    FOR    ${key}    ${value}    IN    &{user}
        Log To Console   Key is '${key}' and value is '${value}'.
    END

while 迴圈

在 Robot Framework 也有提供 while 的用法,並且為了避免測試進入無窮迴圈,Robot Framework 非常貼心的預設了 10,000 次的迭代次數限制。這個限制也可以根據需求通過 limit 配置參數進行調整,下面的範例可以看到我們設置了 WHILE True,理論上已經進入到無窮迴圈了,但是多虧 limit 讓我們最多 10 次便停下來了。

*** Test Cases ***
Test Case 001
    WHILE    True    limit=10
        Log    This is run 10 times.
    END

結語

控制結構可以說是每個語言都必須學習的必修課,在 Robot Framework 中也不例外,它們讓我們能夠實現更為複雜的邏輯操作,從而讓測試案例更加靈活和有彈性。雖然 Robot Framework 提供了強大的 if-else 和 for loop 等控制結構,但其語法和結構對於習慣其他語言的人來說可能會有些不直觀。不過,理解並熟練掌握這些控制結構後,我們可以更好地控制測試的執行流程,讓測試更貼合實際需求。


上一篇
[5] Robot Framework 測試執行的先後順序
下一篇
[7] Robot Framework 斷言(Assertion)
系列文
建立應用程式 UI 自動化測試 - 以 Robot Framework 為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言